SSH用の秘密鍵を無くしてしまった方へ。Systems MangerでEC2の秘密鍵を追加してみた
こんにちは。Kyoです。
「EC2の秘密鍵を無くしてしまった…。」
こんな状況に出くわしたことはありませんか?
秘密鍵は厳密に管理されるべきですが、チームメンバの入れ替わり時に鍵の情報が引き継がれていなかったなど、どうしようもないシチュエーションもあるかと思います。
今回はそんな時のためにSystems Manger(以下、SSM)のオートメーションAWSSupport-ResetAccessを利用して秘密鍵を追加する方法をご紹介します。
なお、SSMを利用できる状況であればセッションマネージャーによる接続も可能です。 もし、秘密鍵にこだわらなくても良いという状況であれば、そちらが有効かと思います。
また、「それっぽい鍵があるんだけど、これって本当に対象の鍵なの?」という場合には、フィンガープリントの確認が有効です(過去にpemファイルが違う名前で保存されていたケースがありました)。 こちらについては弊社佐々木の記事で紹介しておりますので、こちらをご参照ください。
公式ドキュメント
本記事は公式ドキュメントを参考に作成されました。より詳細な情報が必要な場合は以下をご参照ください。
注意: ドキュメントのタイトルはリセットですが、実施後、従来の鍵によるSSH接続も有効であったため、正確には「追加」と思われます
概要
AWSSupport-ResetAccess ドキュメントでは、Amazon EC2 Windows インスタンスでローカル管理者パスワードの生成を自動的に再有効化し、Amazon EC2 Linux インスタンスで新しい SSH キーを生成できます。AWSSupport-ResetAccess ドキュメントは、Systems Manager アクション、AWS CloudFormation アクション、および Lambda 関数の組み合わせを実行することで、ローカル管理者パスワードのリセットに通常必要なステップを自動化するよう設計されています。
注意: 本方法では仕組み上、インスタンスの再起動が伴います
仕組みの詳細は、こちらをご参照ください 。
やってみた
事前準備
- EC2の管理画面から対象インスタンスの
インスタンスID
をメモします
※本記事ではLinuxを例として扱います
SSMオートメーションの実行
SSMのオートメーションから、オートメーションの実行を選択
ドキュメントを選択
「AWSSupport-ResetAccess」で検索し、リンクをクリックしてください。
自動化ドキュメントの実行
メモしておいたインスタンスIDを入力し、実行をクリックします。
- デフォルトでは一時的に新規のVPCが生成(および削除)されますが、既存のサブネットIDを指定することでこれを避けることも可能です。
- なお、IAMロールを利用する場合はAssumeRoleにもARNを入力します。
- 実行に必要なIAMロールおよびポリシはAWSがCloudFormationのテンプレートとして提供していますので、そちらをご利用ください。
実行には15分程度必要です。
SSMパラメタストアから秘密鍵を取得し、SSH接続してみる
SecureStringで出力されています。この値をテキストファイル等に貼り付け、拡張子をpemに変更します。
chmod
でパーミッションを変更します。
chmod 400 対象のpemファイル
SSHしてみます。
<user>$ ssh -i <新しいpemファイル> ec2-user@<public IP> The authenticity of host 'xxxxxx' can't be established. ECDSA key fingerprint is SHA256:yyyyyyyy. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xxxxxx' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ 15 package(s) needed for security, out of 31 available Run "sudo yum update" to apply all updates.
終わりに
今回はSSMでEC2の秘密鍵の追加を行う方法をご紹介しました(できれば、これを使うシチュエーションが来ないことを願います)。
以上、何かの参考になれば幸いです。